package cn.edu.zsc.rbac.domain.entity;


import java.time.LocalDateTime;
import java.util.Objects;

public abstract class BaseEntity {
//定义了一个名为 BaseEntity 的抽象类，表示这是其他实体类的基类。
//其他实体类（如 User、Role 等）将继承此类，以复用通用字段和行为。

    //  新增字段：是否已被软删除
    private boolean deleted = false;
//新增一个布尔类型字段 deleted，默认值为 false。
//用于标识该实体是否被“软删除”（即逻辑删除，数据仍存在于数据库中，但不参与业务逻辑）。
    // 提供了 getter 和 setter 方法，允许外部读取或修改软删除状态。
    public boolean isDeleted() {
        return deleted;
    }

    public void setDeleted(boolean deleted) {
        this.deleted = deleted;
    }

    /**
     * 主键 ID，只读的属性
     */
    private Integer id;

    /**
     * 创建时间
     */
    public LocalDateTime createAt;

    /**
     * 更新时间
     */
    public LocalDateTime updateAt;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public BaseEntity() {
    }//构造方法

    public BaseEntity(Integer id, LocalDateTime createAt, LocalDateTime updateAt) {
        this.id = id;
        this.createAt = createAt;
        this.updateAt = updateAt;
    }//带参数的构造方法

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        BaseEntity that = (BaseEntity) o;
        return Objects.equals(id, that.id);
    }
//根据 id 字段重写了 equals() 和 hashCode() 方法，确保基于 ID 的唯一性判断。
//在集合操作（如 Set、HashMap）中能正确识别相同实体。
    @Override
    public int hashCode() {
        return Objects.hashCode(id);
    }
}
